#include<iostream>
#include"http.hpp"



#define WWWWROOT "./wwwroot"

std::string HandleRequest(const HttpRequest& req)
{
    std::stringstream req_str;
    req_str << req.method_ << " " << req.resou_path_ << " " << req.version_ << "\r\n";
    for (auto& it : req.params_)
    {
        req_str << it.first << ": " << it.second << "\r\n"; 
    }

    for (auto& header : req.headers_)
    {
        req_str << header.first << ": " << header.second << "\r\n";
    }
    req_str << "\r\n";
    req_str << req.body_;

    return req_str.str();
}


void Hello(const HttpRequest& req, HttpResponse* rsp)
{
    rsp->SetContent(HandleRequest(req), "text/plain");
}

void Post(const HttpRequest& req, HttpResponse* rsp)
{
    rsp->SetContent(HandleRequest(req), "text/plain");
}

void Put(const HttpRequest& req, HttpResponse* rsp)
{
    std::string path_name = WWWWROOT + req.resou_path_;
    Util::WriteFile(path_name,req.body_);
}

void Delete(const HttpRequest& req, HttpResponse* rsp)
{
    rsp->SetContent(HandleRequest(req), "text/plain");
}


int main()
{
    HttpServer http_server(8888);
    http_server.SetThreadCount(3);
    http_server.SetBasedir(WWWWROOT);
    http_server.Get("/hello",Hello);
    http_server.Post("/login",Post);
    http_server.Put("/1234.txt",Put);
    http_server.Delete("/1234.txt",Delete);
    http_server.Start();
    return 0;
}


// //判断资源路径是否合法
// int main()
// {
//     std::cout << Util::IsValidPath("/index.html") << std::endl;
//     std::cout << Util::IsValidPath("/index.html/../../hht.txt") << std::endl;

//     return 0;
// }
//判断是否是目录文件、普通文件测试
// int main()
// {
//     std::string str1 = "../http";
//     std::string str2 = "http.hpp"; 

//     std::cout << Util::IsDirectory(str1) << std::endl;
//     std::cout << Util::IsRegular(str1) << std::endl;
//     std::cout << Util::IsDirectory(str2) << std::endl;
//     std::cout << Util::IsRegular(str2) << std::endl;
//     return 0;
// }

//状态码转化为状态描述信息和扩展名转化为mime测试
// int main()
// {
//     std::string str ;
//     //str = Util::StatuDesc(800);
//     str = Util::ExtMime("a.lloll");
    

//     std::cout << str << std::endl;
//     return 0;
// }

//url的编码与解码测试
// int main()
// {
//     std::string str = "/html/index.html?username=wahaha&passwd=C  ";

//     std::string ret = Util::EnCode(str,true);
//     std::string tmp = Util::DeCode(ret,true);

    
//     std::cout << ret << std::endl;
//     std::cout << tmp << std::endl;
//     return 0;
// }
// int main()
// {
//     std::string filaname = "http.hpp";
//     std::string ret;
//     std::string filename("./http.hpp");
//     Util::ReadFile(filename,&ret);


//写入文件测试
//     //将ret写入文件
//     std::string dest = "ttttt.hpp";
//     Util::WriteFile(dest,ret);
//     return 0;
// }


//读取文件测试
//
// int main()
// {
//     std::string ret;
//     std::string filename("./http.hpp");

//     Util::ReadFile(filename,&ret);

//     std::cout << ret << std::endl;
// }


//字符串分割测试
// //split的test
// int main()
// {
//     std::string str("aaaa,,dsaf,dfs,");
//     std::vector<std::string> ret;
//     Util::Split(str,",",&ret);
//     for (auto &s : ret)
//     {
//         std::cout << "[" << s << "]\n";
//     }
    

//     return 0;
// }

